// PROGRAMA : IDCPE091
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// CONSULTOR : JORGE PASSOS
// PROGRAMADOR : EDNA PINTO DATA: 09/01/98
// OBJETIVO : EMITE ATESTADO DE ANTECEDENTES
// ATUALIZACOES:

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Calendar;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Idcpe091Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Idcpe091A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Relatoriolist;
import br.com.vti.sisp_sicrim.antigo.model.DidCadastro;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislm001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Prodrel;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Idcpe091 OBJETIVO : EMITE ATESTADO DE ANTECEDENTES *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/idcpe091")
public class Idcpe091 {
	// Views utilizadas
	DidCadastro vwDidcad = new DidCadastro();
	SicControle vwDvecon = new SicControle();
	SicCadastro criminalView = new SicCadastro();
	DidCadastro civilView = new DidCadastro();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Idcpe091A idcpe091A;
	Idcpe091Report report;
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	Sislm001 sislm001 = new Sislm001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;

	private String ctl;
	private String chassi;
	private String jNomeMae;
	private String jNomePai;
	// private long jRegger;
	private long[] datnas = new long[3];;
	private long[] ndemid = new long[3];;
	private String[] comun = new String[3];;
	private String[] nomide = new String[3];

	private String codmun;

	// private String filia1;
	private String filia2;
	private String chave;
	private int jOpc1;
	private int jOpc;
	public int retorna = 0;
	InputStreamDownload rel;
	Idcpe091 idcpe091Anterior;
	private Object faseproc = "";
	Relatoriolist relatorio;

	public Idcpe091(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	private Idcpe091A preMapas() {
		idcpe091A = new Idcpe091A(true, sessao);

		idcpe091A.setJregger(0);
		// idcpe091A.setDataCorrente(UtilBean.inverteDataCorrente());
		// idcpe091A.setNomeClasse(this.getClass().getSimpleName());

		return idcpe091A;
	}

	@Post
	public void executar(Idcpe091A idcpe091A, Relatoriolist relatoriolist) throws Exception {

		try {
			main(idcpe091A, relatoriolist);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}

	}

	public void main(Idcpe091A pidcpe091A, Relatoriolist prelatoriolist) throws Exception {
		if (prelatoriolist != null && prelatoriolist.getFuncao().equals("3")) {
			prelatoriolist.setSessao(sessao);
			prelatoriolist.receberTela(primeiraVez, result);
			return;
		}
		if (pidcpe091A == null) {
			preMapas();
			idcpe091A.setNavegar("../idcpe091/executar");
			result.include("idcpe091A", idcpe091A);
			sessao.setAtributo("IDCPE091", this);

			return;
		} else {
			restaurarEstados(pidcpe091A);
		}

		idcpe091A.setNavegar("../idcpe091/executar");

		jOpc1 = 0;
		estla001.cpo = 7;
		estla001.esttip = 99;
		// //DEFINE PRINTER(1)

		// OUTPUT 'P69C'

		// RELATORIO
		report = new Idcpe091Report();
		report.setDataCorrente(UtilBean.inverteDataCorrente());
		report.setPageSize(34);
		report.setLineSize(80);
		// RELATORIO
		for (int i1 = 1; i1 <= 2; i1++) {
			nomide[i1] = "";
		}
		jNomeMae = "";
		jNomePai = "";
		// idcpe091A.setFilia1("");
		filia2 = "";
		for (int i1 = 1; i1 <= 2; i1++) {
			comun[i1] = "";
			datnas[i1] = 0;
		}
		ctl = "";
		// qde = 0;

		if (!sessao.getSisgsisp().getOperacao().equals("EBA")) {
			funcoes.sissm001(result, sessao);
		}

		// if (!UtilBean.funcao.equals(UtilBean.ctt_processa))
		// {
		// idcpe091A.enviarMensagem(null, "");
		// return;
		// }

		funcoes.tabsemi(sessao);
		chave = "";
		if (idcpe091A.getJregger() != 0) {
			while (vwDvecon.pesquisaNumeroDocumentoTipoDocumentoIn(ndemid[1], 87, 88)) {

				if (vwDvecon.getTipoDocumento() == 87) {
					idcpe091A.enviarMensagem("jRegger", "DOCUMENTO CANCELADO EMISSAO NAO PERMITIDA");
					return;
				}

			}
			vwDvecon.fecha();
			chassi = "";
			rel = acha();
			funcoes.estna001(estla001.cpo, estla001.esttip, estla001.qde, sessao.getSisgsisp().getVar(), sessao.getSisgsisp().getMatric());
			// dao.rollback();
		}

		UtilBean.salvaAcao("br.com.vti.sisp.controller.programa.Idcpm001"); // STACK

		if (retorna == 0) {
			return;
		} else {

			if (retorna == 2) {

				primeiraVez = true;
				if (prelatoriolist == null)
					relatorio = new Relatoriolist(primeiraVez, sessao);
				relatorio.setNavegar("../idcpe091/executar");
				relatorio.setTitulo(" ATESTADO ");
				relatorio.setSessao(sessao);
				if (rel != null) {
					long rel1 = Calendar.getInstance().getTimeInMillis();
					relatorio.getLista().add(new Prodrel(rel1, "Relatorio1"));
					sessao.setAtributo("" + rel1, rel);
				}
				result.include("relatoriolist", relatorio);
				sessao.setAtributo("IDCPE091", this);

				relatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

			}
			return;
		}

	}

	private InputStreamDownload acha() throws Exception {
		vwDidcad.consultaNumeroRg(idcpe091A.getJregger());

		if (vwDidcad.totalRegistros() == 0) {
			UtilBean.salvaAcao("br.com.vti.sisp.mb.programa.Idcpm001"); // STACK
		}
		report.setNomide(1, vwDidcad.getNomeIdent());
		jNomePai = vwDidcad.getNomePai();
		jNomeMae = vwDidcad.getNomeMae();
		report.setF1(vwDidcad.getNomePai());
		report.setF2(vwDidcad.getNomeMae());
		if (jNomeMae.trim().equals("")) {
			// MOVE
			jNomeMae = "************";
		}

		if (jNomePai.trim().equals("")) {
			// MOVE
			jNomePai = "************";
		}

		criminal();
		if (chave.equals("N")) {
			idcpe091A.enviarMensagem("jRegger", "EMISSAO NAO PERMITIDA - ALERTAR AS AUTORIDADES");
			return rel;
		}

		// SETMOVE
		report.setF3(" E ");
		report.setFilia1(String.format("%35s%35s%35s", jNomePai, " E ", jNomeMae));
		// FILIA1 = UtilBean.concatena(idcpe091A.getF1() , idcpe091A.getF3() ,
		// idcpe091A.getF2());
		report.setDatnas(1, vwDidcad.getDataNasc());
		datnas[1] = funcoes.sissd002(datnas[1]);
		vwTabele.pesq = UtilBean.moveSubstring(vwTabele.pesq, 0, 3, "N", 1);
		vwTabele.pesq = UtilBean.moveSubstring(vwTabele.pesq, 3, 12, "N", vwDidcad.getNomeMunicipioIdent());
		vwTabele.resp = funcoes.sisst001(1, civilView.getNomeMunicipioIdent(), vwTabele.resp);
		codmun = vwTabele.resp;
		comun[1] = UtilBean.concatena(codmun, "-", vwDidcad.getUfMunicipioNasc());
		chassi = UtilBean.formataMascara(idcpe091A.getJregger(), "N", 13, "9999999999999");
		sessao.getSisgsisp().setMens("EMISSAO EFETUADA OK");
		report.gravaRelatorio(1);

		// RELATORIO

		// 01T 'FILIACAO:' FILIA1
		// 01T 'NATURAL DE:' 1X COMUN(1)
		// 48T 'NASCIDO EM:' DATNAS(1) (EM=99/99/9999)

		idcpe091A.setJregger(0);
		vwDidcad.fecha();
		return report.imprimir();
	}

	private void criminal() {
		while (criminalView.pesquisaNomeCompletoNomeMaeRegFederalCi(nomide[1], jNomeMae, idcpe091A.getJregger())) {
			if (criminalView.getStatusReg() != 1) {
				chave = "N";
			}

		}
		criminalView.fecha();
	}

	private void restaurarEstados(Idcpe091A pidcpe091A) {
		try {
			this.idcpe091Anterior = (Idcpe091) sessao.getAtributo("IDCPE091");
		} catch (Exception e) {

		}

		if (pidcpe091A != null) {
			idcpe091A = pidcpe091A;
		} else {
			if (idcpe091Anterior != null)
				idcpe091A = this.idcpe091Anterior.idcpe091A;
		}
		if (idcpe091Anterior != null)
			faseproc = idcpe091Anterior.faseproc;

		idcpe091A.setSessao(sessao);

	}

}
